In packet based wired and wireless communication systems packets can be lost during packet transmission. Thus, in a wireless packet based communication environment, packets can be lost. Therefore, packet senders and packet receivers can buffer transmitted and received packets to facilitate efficient interaction with communication protocol stack layers involved in delivering packets. By way of illustration, the well-known TCP/IP protocol employs a master/slave sender and receiver window synchronization system wherein one side of a communication acts as the master and controls the synchronization of windows.
Conventionally a sender has a transmit window in which packets that have been sent to a receiver but not acknowledged are buffered. Such packets include sequence numbers that facilitate in sequence communication with other protocol stack layers. Thus, if a retransmission is required, the packet can be retransmitted from the buffer, rather than requiring communication with the protocol stack layer that generated the packet. Furthermore, the sequence numbers and sender window facilitate abandoning a packet after a pre-determined, configurable number of retransmission attempts.
Similarly, a receiver has a window to buffer packets with sequence numbers that have been received to facilitate delivering packets in sequence to another protocol stack layer. If a packet is not received correctly, then packets that were received correctly and which would be out of sequence if delivered to a subsequent protocol stack layer can be buffered until such time as the packet is received correctly and the sequence can be maintained. In such a conventional system, one side of the communication typically acts as a master, and the other as a slave. The master transmits synchronization messages (“sync” messages) that inform the slave of the proper position for its buffer. This traditional system leads to too many packets being buffered, additional overhead (e.g., sync messages), and latency problems.